//
//  main.m
//  MRC
//
//  Created by apple on 15/8/23.
//  Copyright (c) 2015年 戴维营. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Dog.h"

Dog *dog;
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        NSLog(@"retainCount: %lu",dog.retainCount);//---->0
        
//        alloc-> 创建一个引用计数为1的对象；
        dog = [[Dog alloc] init];
        NSLog(@"alloc : %lu",dog.retainCount);//------>1
        
//        retain->对象的引用计数加 1；
        [dog retain];
        NSLog(@"retain : %lu",dog.retainCount);//------>2
        
//        release->对象的引用计数减 1；
        [dog release];
        NSLog(@"release : %lu",dog.retainCount);//------>1
        
//        [dog release];
//        NSLog(@"release: %@",dog.retainCount);
        
//        autorelease->对象的引用计数延时减 1；
        [dog autorelease];
        NSLog(@"autorelease : %lu",dog.retainCount);//------>1
    }
//    对象不是在这个autoreleasepool释放了嘛？怎么下面还是 1；
    
//    当retaincount为1时，被release时，直接的调用dealloc，对象直接的释放掉了，而这对象内容什么的还在，只不过是废弃掉了，系统优化了retaincount减为0，以及清空这片内存所花的时间；
    NSLog(@"autorelease: %lu",dog.retainCount);//------>1
    return 0;
}
